package com.gdth.service;

import com.gdth.utils.DateTimeUtil;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;
import android.util.Log;

public class BankService extends Service {

	public final static String TAG = "BankService";

	private final static int longtime = 60 * 1000;
	
	/**
	 * 定时闹钟
	 */
	private Intent intent_heart;
	
	@Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub

        super.onStart(intent, startId);
        
        Log.e(TAG, "BankService Start: " + DateTimeUtil.getCurrentTime());
        
        startAlarm();
    }
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		return super.onStartCommand(intent, flags, startId);
	}

	@Override
	public IBinder onBind(Intent arg0) {
		return null;
	}
	
	@Override
    public void onDestroy() {
        // TODO Auto-generated method stub
		Log.e(TAG, "BankService stop: " + DateTimeUtil.getCurrentTime());
		stopAlarm();
        super.onDestroy();
	}
	
	/**
	 * 启动
	 */
	private void startAlarm() {
		AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
		long firstime = SystemClock.elapsedRealtime();
        intent_heart = new Intent(this, BankReceiver.class);
		PendingIntent pi_heart = PendingIntent.getBroadcast(this, 0, intent_heart, 0);
		//AlarmManager.ELAPSED_REALTIME表示闹钟在手机睡眠状态下不可用，该状态下闹钟使用相对时间（相对于系统启动开始），状态值为3；
		//AlarmManager.ELAPSED_REALTIME_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能，该状态下闹钟也使用相对时间，状态值为2；
		//AlarmManager.RTC表示闹钟在睡眠状态下不可用，该状态下闹钟使用绝对时间，即当前系统时间，状态值为1；
		//AlarmManager.RTC_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能，该状态下闹钟使用绝对时间，状态值为0；
		//AlarmManager.POWER_OFF_WAKEUP表示闹钟在手机关机状态下也能正常进行提示功能，所以是5个状态中用的最多的状态之一，该状态下闹钟也是用绝对时间，状态值为4；不过本状态好像受SDK版本影响，某些版本并不支持；
				
		//该方法用于设置一次性闹钟，第一个参数表示闹钟类型，第二个参数表示闹钟执行时间，第三个参数表示闹钟响应动作。
//		long triggerAtTime = SystemClock.elapsedRealtime() + anHour;
//		manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi_heart);

		//该方法用于设置重复闹钟，第一个参数表示闹钟类型，第二个参数表示闹钟首次执行时间，第三个参数表示闹钟两次执行的间隔时间，第三个参数表示闹钟响应动作。
		manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime, longtime, pi_heart);
	}
	
	/**
	 * 停止
	 */
	private void stopAlarm() {
		Intent intent = new Intent(this, BankReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
        //获取闹钟管理器
        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        alarmManager.cancel(pendingIntent);
	}
}
